package com.cskaoyan.javase.oop3._3lambda._3notice;

/**
 * Lambda表达式使用的注意事项:
 *      1.方法引用所指向的实现方法,只要是已经存在就可以了
 *          可以是自己手写的方法
 *          当然也可以源码,三方工具类库等中的方法.
 *
 *      2.Lambda表达式仍然是特殊的局部内部类,如果访问局部变量
 *          那么该局部变量仍然是常量
 *
 *      3.(最特殊的,了解语法即可)
 *      局部内部类，匿名内部类它们都有自己独立的作用域，能够自定义自己的成员.
 *      但是Lambda表达式没有自身独立的作用域，不能自定义成员，大括号是一个方法体,而且它和装有lambda表达式的方法(或者其它大括号)共用同一个作用域。
 *
 * @since 10:09
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println("hello world!");
        IA ia = System.out::println;
        ia.test("我引用了你的实现~~");

        int a = 10;
        IA ia2 = str -> {
            System.out.println(a);
            // System.out.println(a++);
            // int a = 20;
        };
        // if (true){
        //     int a = 10;
        // }
    }
}

@FunctionalInterface
interface IA {
    void test(String str);
}